﻿using System;
using System.Collections.Generic;

namespace Pap.Data
{
    /// <summary>
    /// IUser interface
    /// </summary>
    public interface IUser : IEntity
    {
        /// <summary>
        /// Gets or sets the user ID.
        /// </summary>
        /// <value>
        /// The user ID.
        /// </value>
        Guid UserID
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the birthdate.
        /// </summary>
        /// <value>
        /// The birthdate.
        /// </value>
        DateTime Birthdate
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the display name.
        /// </summary>
        /// <value>
        /// The display name.
        /// </value>
        string DisplayName
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the email.
        /// </summary>
        /// <value>
        /// The email.
        /// </value>
        string Email
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the job title.
        /// </summary>
        /// <value>
        /// The job title.
        /// </value>
        string JobTitle
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the password.
        /// </summary>
        /// <value>
        /// The password.
        /// </value>
        string Password
        {
            get;
            set;
        }

        /// <summary>
        /// Gets or sets the username.
        /// </summary>
        /// <value>
        /// The username.
        /// </value>
        string Username
        {
            get;
            set;
        }

        /// <summary>
        /// Gets the roles.
        /// </summary>
        IEnumerable<IRole> Roles
        {
            get;
        }

        /// <summary>
        /// Gets the permissions.
        /// </summary>
        IEnumerable<IPermission> Permissions
        {
            get;
        }


        /// <summary>
        /// Gets the projects.
        /// </summary>
        IEnumerable<IProject> Projects
        {
            get;
        }

        /// <summary>
        /// Gets the user projects.
        /// </summary>
        IEnumerable<IUsersProject> UserProjects
        {
            get;
        }

        /// <summary>
        /// Gets the users roles.
        /// </summary>
        IEnumerable<IUsersRole> UsersRoles
        {
            get;
        }

        /// <summary>
        /// Gets the users committees.
        /// </summary>
        IEnumerable<IUsersCommittees> UsersCommittees
        {
            get;
        }

        /// <summary>
        /// Gets the customer loans.
        /// </summary>
        IEnumerable<ICustomerLoan> CustomerLoans
        {
            get;
        }



        /// <summary>
        /// Changes the roles.
        /// </summary>
        /// <param name="newRoleList">The new role list.</param>
        void ChangeRoles(IEnumerable<IRole> newRoleList);
        /// <summary>
        /// Changes the committees.
        /// </summary>
        /// <param name="newCommitteeList">The new committee list.</param>
        void ChangeCommittees(IEnumerable<ICommittee> newCommitteeList);


        /// <summary>
        /// Changes the projects.
        /// </summary>
        /// <param name="newCommitteeList">The new committee list.</param>
        void ChangeProjects(IEnumerable<IProject> newProjectsList);

        /// <summary>
        /// Authenticates the specified password.
        /// </summary>
        /// <param name="password">The password.</param>
        /// <returns></returns>
        bool Authenticate(string password);
    }
}
